<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>

<!-- 
    http协议是无状态的

    前端使用cookie或h5本地存储来记录用户状态

    cookie会随着http请求自动发送到服务端（放在请求头发送）

    服务端使用cookie-parser插件来操作cookie
    app.use(cookieParser())使用插件
    在req对象有一个cookies属性，包含前端携带过来的cookie数据
    在res对象有一个cookie方法，用于在响应头设置cookie

    后端使用session或token来记录用户状态

    session会话控制
    session是一种记录用户状态的机制，存储在服务端（内存或数据库）
    session由两部分组成：session id 和 session data
    session id 通过设置cookie存储在客户端
    session data 存储在服务端（内存或数据库）
    使用express-session插件来操作session
    app.use(session({配置}))使用插件

    token令牌
    token在计算机应用身份认证中为令牌的意思
    token是一个加密字符串，是一种类似于暗号的机制

    JWT -> Json Web Token
    jwt是token的一种具体的实现方式
    jwt类型的token是一种三段式加密字符串 'aaaa.bbbbb.ccccc'
    第一段：header头信息，是一个JSON对象，使用base64编码
    第二段：payload有效载荷，是一个JSON对象，使用base64编码
    第三段：signature签名，使用base64编码后的header和payload，再加上secret口令，通过HS256哈希算法生成的哈希值

    在nodejs中使用jwt
    1.下载安装
    npm i jsonwebtoken
    2.加载模块
    let jwt = require('jsonwebtoken');
    3.生成token
    let token = jwt.sign({要保存的信息},'口令',{有效期/秒});
    4.验证/解析token
    jwt.verify(token,'口令',(err,payload)=>{})

    保持登录状态的流程：
    1.前端发送登录请求
    2.后端接收登录请求
    3.后端验证登录结果
    4.如果登录成功，生成一个jwt类型的token，并将当前登录的用户信息存储在payload中
    5.后端响应登录结果和token给前端
    6.前端反馈登录结果给用户，并将token存储在本地存储中

    7.之后的请求中，如果需要登录状态时，携带token发送给服务端验证即可
    8.后端返回验证结果和用户信息给前端
    
 -->

</body>
</html>